let a: object   // a 能存储的类型是【非原始类型】

a = {}
a = { name: 'tom' }
a = [1, 3, 5, 7, 9]
a = function () { }
a = new String('123')
class Person { }
a = new Person()

// 以下代码, 是将【原始类型】赋值给a, 有警告
// a = 1           // 警告: 不能将类型“number”分配给类型“object”。
// a = true        // 警告: 不能将类型“boolean”分配给类型“object”。
// a = '你好'      // 警告: 不能将类型“string”分配给类型“object”。
// a = null        // 警告: 不能将类型“null”分配给类型“object”。
// a = undefined   // 警告: 不能将类型“undefined”分配给类型“object”。

let b: Object // b 能存储的类型是可以调用到 Object 方法的类型.(例如 toString())

b = {}
b = { name: '张三' }
b = [1, 3, 5, 7, 9]
b = function () { }
b = new String('123')
class Persion { }
b = new Person()

b = 1       // 1 不是 Object 的实例对象, 但其包装对象是 Object 的实例.
b = true    // true 不是 Object 的实例对象, 但其包装对象是 Object 的实例.
b = '你好'  // '你好' 不是 Object 的实例对象, 但其包装对象是 Object 的实例.

// 以下代码均有警告
// b = null        // 警告: 不能将类型“null”分配给类型“Object”。
// b = undefined   // 警告: 不能将类型“undefined”分配给类型“Object”。
